home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import struct
- import cStringIO
- from g import *
- from codes import *
- NEW_PAGE = 1
- END_PAGE = 2
- NEW_DOCUMENT = 4
- END_DOCUMENT = 8
- END_STREAM = 16
- RESERVED_20 = 32
- RESERVED_40 = 64
- RESERVED_80 = 128
- MFPDTF_RASTER_BITMAP = 0
- MFPDTF_RASTER_GRAYMAP = 1
- MFPDTF_RASTER_MH = 2
- MFPDTF_RASTER_MR = 3
- MFPDTF_RASTER_MMR = 4
- MFPDTF_RASTER_RGB = 5
- MFPDTF_RASTER_YCC411 = 6
- MFPDTF_RASTER_JPEG = 7
- MFPDTF_RASTER_PCL = 8
- MFPDTF_RASTER_NOT = 9
- DT_UNKNOWN = 0
- DT_FAX_IMAGES = 1
- DT_SCANNED_IMAGES = 2
- DT_DIAL_STRINGS = 3
- DT_DEMO_PAGES = 4
- DT_SPEED_DIALS = 5
- DT_FAX_LOGS = 6
- DT_CFG_PARMS = 7
- DT_LANG_STRS = 8
- DT_JUNK_FAX_CSIDS = 9
- DT_REPORT_STRS = 10
- DT_FONTS = 11
- DT_TTI_BITMAP = 12
- DT_COUNTERS = 13
- DT_DEF_PARMS = 14
- DT_SCAN_OPTIONS = 15
- DT_FW_JOB_TABLE = 17
- RT_START_PAGE = 0
- RT_RASTER = 1
- RT_END_PAGE = 2
- FIXED_HEADER_SIZE = 8
- IMAGE_VARIANT_HEADER_SIZE = 10
- DIAL_STRINGS_VARIANT_HEADER_SIZE = 6
- FAX_IMAGE_VARIANT_HEADER_SIZE = 74
- SOP_RECORD_SIZE = 36
- RASTER_RECORD_SIZE = 4
- EOP_RECORD_SIZE = 12
- DIAL_STRING_RECORD_SIZE = 51
- PAGE_FLAG_NEW_PAGE = 1
- PAGE_FLAG_END_PAGE = 2
- PAGE_FLAG_NEW_DOC = 4
- PAGE_FLAG_END_DOC = 8
- PAGE_FLAG_END_STREAM = 16
- SRC_UNKNOWN = 0
- SRC_HOST = 2
- SRC_SCANNER = 5
- SRC_HOST_THEN_SCANNER = 6
- SRC_SCANNER_THEN_HOST = 7
- TTI_NONE = 0
- TTI_PREPENDED_TO_IMAGE = 1
- TTI_OVERLAYED_ON_IMAGE = 2
- MAJOR_VER = 2
- MINOR_VER = 0
-
- def parseFixedHeader(buffer):
- fmt = '<IHBB'
- (block_len, header_len, data_type, page_flags) = struct.unpack(fmt, buffer[:8])
- page_flags = page_flags & 31
- return (block_len, header_len, data_type, page_flags)
-
-
- def parseImageVariantHeader(buffer, data_type):
- if data_type == DT_SCANNED_IMAGES:
- fmt = '<BBHHHH'
- (major_ver, minor_ver, src_pages, copies_per_page, zoom, jpeg_q_factor) = struct.unpack(fmt, buffer[:10])
- return (major_ver, minor_ver, src_pages, copies_per_page, zoom, jpeg_q_factor)
- if data_type == DT_FAX_IMAGES:
- pass
-
-
-
- def parseRecord(buffer):
- record_type = struct.unpack('<B', buffer[0])[0]
- if record_type == RT_START_PAGE:
- fmt = '<BBHHHIIIHHIII'
- (id, encoding, page_num, black_ppr, black_bpp, black_rpp, black_hort_dpi, black_vert_dpi, cmy_ppr, cmy_bpp, cmy_rpp, cmy_hort_dpi, cmy_vert_dpi) = struct.unpack(fmt, buffer[:SOP_RECORD_SIZE])
- if not id == record_type:
- raise AssertionError
- return (id, (encoding, page_num, black_ppr, black_bpp, black_rpp, black_hort_dpi, black_vert_dpi, cmy_ppr, cmy_bpp, cmy_rpp, cmy_hort_dpi, cmy_vert_dpi))
- if record_type == RT_RASTER:
- fmt = '<BBH'
- (id, unused, data_size) = struct.unpack(fmt, buffer[:RASTER_RECORD_SIZE])
- if not id == record_type:
- raise AssertionError
- return (id, (unused, data_size))
- if record_type == RT_END_PAGE:
- fmt = '<BBBBII'
- (id, unused1, unused2, unused3, black_rows, cmy_rows) = struct.unpack(fmt, buffer[:EOP_RECORD_SIZE])
- if not id == record_type:
- raise AssertionError
- return (id, (unused1, unused2, unused3, black_rows, cmy_rows))
- log.error('Error: Invalid record type: %d' % record_type)
- raise Error(ERROR_INTERNAL)
-
-
- def readChannelToStream(device, channel_id, stream, single_read = True, callback = None):
- (STATE_END, STATE_FIXED_HEADER, STATE_VARIANT_HEADER, STATE_RECORD) = range(4)
- (state, total_bytes, block_remaining, header_remaining, data_remaining) = (1, 0, 0, 0, 0)
- endScan = False
- while state != STATE_END:
- log.debug('**** State %d ****' % state)
- if state == STATE_FIXED_HEADER:
- if endScan:
- state = STATE_END
- break
-
- if data_remaining == 0:
- (fields, data) = device.readChannel(channel_id)
- data_remaining = len(data)
- if callback is not None:
- endScan = callback()
-
-
- (block_len, header_len, data_type, page_flags) = parseFixedHeader(data)
- block_remaining = block_len - FIXED_HEADER_SIZE
- header_remaining = header_len - FIXED_HEADER_SIZE
- log.debug('Fixed header: (datalen=%d(0x%x),blocklen=%d(0x%x),headerlen=%d(0x%x),datatype=0x%x,pageflags=0x%x)' % (len(data), len(data), block_len, block_len, header_len, header_len, data_type, page_flags))
- data_remaining -= FIXED_HEADER_SIZE
- data = data[FIXED_HEADER_SIZE:]
- state = STATE_RECORD
- log.debug('Data: data=%d,block=%d,header=%d' % (data_remaining, block_remaining, header_remaining))
- if page_flags & PAGE_FLAG_END_STREAM:
- state = STATE_END
- break
-
- if header_remaining > 0:
- state = STATE_VARIANT_HEADER
-
- header_remaining > 0
- if state == STATE_VARIANT_HEADER:
- if data_type == DT_SCANNED_IMAGES:
- (major_ver, minor_ver, src_pages, copies_per_page, zoom, jpeg_q_factor) = parseImageVariantHeader(data, data_type)
- log.debug('Variant header: (major/minor=%d/%d,src_pages=%d,copies_per_page=%d,zoom=%d,jpeg_q_factor=%d' % (major_ver, minor_ver, src_pages, copies_per_page, zoom, jpeg_q_factor))
- data = data[IMAGE_VARIANT_HEADER_SIZE:]
- block_remaining -= IMAGE_VARIANT_HEADER_SIZE
- header_remaining -= IMAGE_VARIANT_HEADER_SIZE
- data_remaining -= IMAGE_VARIANT_HEADER_SIZE
- elif data_type == DT_FAX_IMAGES:
- log.error('Unsupported data type')
- else:
- log.error('Unsupported data type')
- log.debug('Data: data=%d,block=%d,header=%d' % (data_remaining, block_remaining, header_remaining))
- if header_remaining > 0:
- log.error('Header size error.')
- state = STATE_END
- continue
-
- state = STATE_RECORD
- if block_remaining == 0:
- state = STATE_FIXED_HEADER
- continue
- continue
- continue
- if state == STATE_RECORD:
- (record_type, record) = parseRecord(data)
- if record_type == RT_START_PAGE:
- (encoding, page_num, black_ppr, black_bpp, black_rpp, black_hort_dpi, black_vert_dpi, cmy_ppr, cmy_bpp, cmy_rpp, cmy_hort_dpi, cmy_vert_dpi) = record
- log.debug('Start page record: (encoding=0x%x, page=%d)' % (encoding, page_num))
- data = data[SOP_RECORD_SIZE:]
- block_remaining -= SOP_RECORD_SIZE
- data_remaining -= SOP_RECORD_SIZE
- if block_remaining != 0:
- log.error('Block size error.')
- state = STATE_END
- continue
-
- if single_read:
- state = STATE_END
- continue
- state = STATE_FIXED_HEADER
- log.debug('Data: data=%d,block=%d,header=%d' % (data_remaining, block_remaining, header_remaining))
- continue
- elif record_type == RT_RASTER:
- (unused, data_size) = record
- log.debug('Raster record: (data size=%d(0x%x))' % (data_size, data_size))
- data = data[RASTER_RECORD_SIZE:]
- block_remaining -= RASTER_RECORD_SIZE
- data_remaining -= RASTER_RECORD_SIZE
- log.debug('Data: data=%d,block=%d,header=%d' % (data_remaining, block_remaining, header_remaining))
- if block_remaining > 0 and data_remaining > 0:
- log.debug('Writing remainder of data...')
- data_len = len(data)
- log.debug('Data len=%d(0x%x)' % (data_len, data_len))
- stream.write(data[:block_remaining])
- block_remaining -= data_len
- data_remaining -= data_len
- if data_remaining != 0:
- log.error('Data size error')
- state = STATE_END
- continue
-
-
- while block_remaining > 0:
- if endScan:
- break
-
- log.debug('Reading more data from device...')
- (fields, data) = device.readChannel(channel_id)
- if callback is not None:
- endScan = callback()
-
- data_len = len(data)
- log.debug('Data len=%d(0x%x)' % (data_len, data_len))
- stream.write(data[:block_remaining])
- total_bytes += data_len
- block_remaining -= data_len
- if block_remaining != 0:
- log.error('Block size error.')
- state = STATE_END
- continue
-
- state = STATE_FIXED_HEADER
- continue
- elif record_type == RT_END_PAGE:
- (unused1, unused2, unused3, black_rows, cmy_rows) = record
- log.debug('End page record: (black_rows=%d,cmy_rows=%d)' % (black_rows, cmy_rows))
- data = data[EOP_RECORD_SIZE:]
- block_remaining -= EOP_RECORD_SIZE
- data_remaining -= EOP_RECORD_SIZE
- if block_remaining != 0:
- log.error('Block size error.')
-
- log.debug('Data: data=%d,block=%d,header=%d' % (data_remaining, block_remaining, header_remaining))
- if page_flags & PAGE_FLAG_END_DOC or page_flags & PAGE_FLAG_END_STREAM:
- state = STATE_END
- continue
- state = STATE_FIXED_HEADER
- continue
-
- record_type == RT_START_PAGE
- log.debug('Read %d bytes' % total_bytes)
- return endScan
-
-
- def buildMFPDTFBlock(data_type, page_flags = 0, send_variant = False, data = None):
- block = cStringIO.StringIO()
- block.write(struct.pack('<I', 0))
- header_len = FIXED_HEADER_SIZE
- if send_variant:
- if data_type == DT_DIAL_STRINGS:
- header_len += DIAL_STRINGS_VARIANT_HEADER_SIZE
- elif data_type == DT_FAX_IMAGES:
- header_len += FAX_IMAGE_VARIANT_HEADER_SIZE
-
-
- block.write(struct.pack('<H', header_len))
- block.write(struct.pack('<B', data_type))
- block.write(struct.pack('<B', page_flags))
- if send_variant:
- if data_type == DT_DIAL_STRINGS:
- block.write(struct.pack('<BB', MAJOR_VER, MINOR_VER))
- block.write(struct.pack('<H', 1))
- block.write(struct.pack('<H', 51))
- elif data_type == DT_FAX_IMAGES:
- block.write(struct.pack('<BB', MAJOR_VER, MINOR_VER))
- block.write(struct.pack('<B', SRC_HOST))
- block.write(struct.pack('<H', 1))
- block.write(struct.pack('<B', TTI_NONE))
- block.write(struct.pack('<I', 0))
- block.write('\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
- block.write(' ')
- block.write(' ')
- block.write('<I', 0)
-
-
- if data_type == DT_DIAL_STRINGS:
- if data is not None:
- dial_string = data['dial-string']
- block.write(dial_string)
- block.write('\x00' * (51 - len(dial_string)))
-
- elif data_type == DT_FAX_IMAGES:
- pass
-
-
-